package com.qa.mapper;

import com.qa.pojo.entity.Category;
import com.qa.pojo.entity.CategoryQuery;
import com.qa.pojo.vo.CategoryQueryVO;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * @author 徐
 */
@Mapper
public interface CategoryMapper {

    /**
     * 新建分类
     *
     * @param category Category
     * @return Integer
     */
    @Insert("insert into category (name, status, open, creator) values (#{name}, #{status}, #{open}, #{creator})")
    Integer addCategory(Category category);

    /**
     * 查询某一题目所属的分类
     *
     * @param questionId 题目id
     * @return Category
     */
    @Select("SELECT * FROM category WHERE id IN " +
            "(" +
            "SELECT category_id FROM question_category WHERE question_id = #{questionId}" +
            ")")
    List<Category> getCategoryByQuestion(Long questionId);

    /**
     * 查询一些题目所属的存在的分类
     *
     * @param questionIds 题目id
     * @return Category
     */
    List<CategoryQuery> getCategoryByQuestions(@Param("questionIds") List<Long> questionIds);

    /**
     * 查询某一用户的所有存在的分类
     *
     * @param userId 用户id
     * @return List<Category>
     */
    @Select("SELECT * FROM category WHERE creator = #{userId} and status = 1")
    List<Category> getCategoryByUser(Long userId);

    /**
     * 根据分类名称查询公开的存在的别人的分类（分类id，分类名称，创建者，创建者昵称）
     *
     * @param userId 用户id
     * @param name   分类名称
     * @return List CategoryQueryVO
     */
    List<CategoryQueryVO> getCategoryByName(@Param("userId") Long userId, @Param("name") String name);

    /**
     * 修改分类
     *
     * @param category 分类
     * @return Integer
     */
    Integer updateCategory(Category category);

    /**
     * 删除我的分类
     *
     * @param category 分类
     * @return Integer
     */
    @Update("update category set status = 0 where id = #{id} and creator = #{creator}")
    Integer deleteCategory(Category category);
}
